package org.jsola.hr.web;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.jsola.core.Page;
import org.jsola.core.Result;
import org.jsola.hr.dto.EmpSocMonthAddDTO;
import org.jsola.hr.dto.EmpSocMonthUpdateDTO;
import org.jsola.hr.query.EmpSocMonthQuery;
import org.jsola.hr.query.SocCheckCustomQuery;
import org.jsola.hr.vo.EmpSocMonthListVO;
import org.jsola.hr.vo.EmpSocMonthVO;
import org.jsola.hr.vo.MonthNextAndPreviousCheckVO;
import org.jsola.hr.vo.YearAndMonthVO;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * 员工参保信息月统计
 *
 * @author zhr
 */
@Api(tags = "hr-员工参保信息月统计")
public interface IEmpSocMonthControllerAPI {

    /**
     * 新增员工参保信息月统计
     * @param empSocMonthAddDTO 员工参保信息月统计新增实体
     * @return 员工参保信息月统计展示对象
     */
    @ApiOperation(value = "新增员工参保信息月统计")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empSocMonthAddDTO", dataType = "EmpSocMonthAddDTO", value = "新增员工参保信息月统计", paramType = "body")
    })
    Result<EmpSocMonthVO> save(EmpSocMonthAddDTO empSocMonthAddDTO);

    /**
     * 新增员工参保信息月统计
     * @param empSocMonthAddDTO 员工参保信息月统计新增实体
     * @return 员工参保信息月统计展示对象
     */
    @ApiOperation(value = "新增员工参保信息月统计")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empSocMonthAddDTO", dataType = "EmpSocMonthAddDTO", value = "新增员工参保信息月统计", paramType = "body")
    })
    Result<EmpSocMonthVO> initSave(EmpSocMonthAddDTO empSocMonthAddDTO);

    /**
     * 修改员工参保信息月统计
     * @param empSocMonthUpdateDTO 员工参保信息月统计
     * @return 更新数量
     */
    @ApiOperation(value = "修改员工参保信息月统计")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empSocMonthUpdateDTO", dataType = "EmpSocMonthUpdateDTO", value = "修改员工参保信息月统计", paramType = "body")
    })
    Result<Integer> update(EmpSocMonthUpdateDTO empSocMonthUpdateDTO);




    /**
     * 删除单个员工参保信息月统计，彻底删除
     * @param empSocMonthId 员工参保信息月统计id
     * @return 删除数量
     */
    @ApiOperation(value="删除单个员工参保信息月统计，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empSocMonthId", dataType = "String", value = "员工参保信息月统计id", paramType = "path")
    })
    Result<Integer> delete(String empSocMonthId);

    /**
     * 根据公司Id 年 月 删除单个员工参保信息月统计
     * @param companyId 公司Id
     * @param year 年
     * @param month 月
     * @return 删除数量
     */
    @ApiOperation(value="根据公司Id 年 月 删除单个员工参保信息月统计")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司Id", paramType = "query"),
            @ApiImplicitParam(name = "year", dataType = "String", value = "年", paramType = "query"),
            @ApiImplicitParam(name = "month", dataType = "String", value = "月", paramType = "query")
    })
    Result<Integer> deleteByCompanyIdAndYearMonth(String companyId, String year, String month);


    /**
     * 批量删除员工参保信息月统计，彻底删除
     * @param empSocMonthIds 员工参保信息月统计id集合
     * @return 删除数量
     */
    @ApiOperation(value = "批量删除员工参保信息月统计，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empSocMonthIds", dataType = "String[]", value = "员工参保信息月统计id数组", paramType = "body" ,allowMultiple = true)
    })
    Result<Integer> deleteBatch(String[] empSocMonthIds);


    /**
     * 根据员工参保信息月统计id查询员工参保信息月统计详情
     * @param empSocMonthId 员工参保信息月统计id
     * @return 员工参保信息月统计详情
     */
    @ApiOperation(value="根据员工参保信息月统计id查询员工参保信息月统计详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empSocMonthId", dataType = "String", value = "员工参保信息月统计id", paramType = "path")
    })
    Result<EmpSocMonthVO> findById(String empSocMonthId);


    /**
     * 查询员工参保信息月统计
     * @param empSocMonthQuery 员工参保信息月统计查询参数
     * @return page
     */
    @ApiOperation(value="查询员工参保信息月统计")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empSocMonthQuery", dataType = "EmpSocMonthQuery", value = "员工参保信息月统计查询参数", paramType = "query")
    })
    Result<List<EmpSocMonthListVO>> listAll(EmpSocMonthQuery empSocMonthQuery);


     /**
     * 分页查询员工参保信息月统计
     * @param empSocMonthQuery 员工参保信息月统计查询参数
     * @return page
     */
    @ApiOperation(value="分页查询员工参保信息月统计")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "empSocMonthQuery", dataType = "EmpSocMonthQuery", value = "员工参保信息月统计查询参数", paramType = "query")
    })
    Result<Page<EmpSocMonthListVO>> page(EmpSocMonthQuery empSocMonthQuery);


    /**
     * 某公司已生成参保的年月
     *
     * @param companyId 公司id
     * @return 返回结果
     */
    @ApiOperation(value = "某公司已生成参保的年月")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "path")
    })
    Result<List<YearAndMonthVO>> listYearAndMonthByCompany(String companyId);

    /**
     * 检测传入月份的前一个和后一个参保月创建与否
     * @param year 年
     * @param month 月
     * @param companyId 公司Id
     * @return 创建情况
     */
    @ApiOperation(value = "检测传入月份的前一个和后一个参保月创建与否")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "year", dataType = "String", value = "年", paramType = "query"),
            @ApiImplicitParam(name = "month", dataType = "String", value = "月", paramType = "query"),
            @ApiImplicitParam(name = "companyId", dataType = "String", value = "公司id", paramType = "query")
    })
    Result<MonthNextAndPreviousCheckVO> checkMonthNextAndPrevious(String year, String month, String companyId);

    /**
     * 查询公司下的所有参保月(社保校验页面)
     *
     * @param socCheckCustomQuery 查询参数
     * @return 参保月
     */
    @ApiOperation(value = "查询公司下的所有参保月(社保校验页面)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "socCheckCustomQuery", dataType = "SocCheckCustomQuery", value = "查询参数", paramType = "query")
    })
    Result<List<EmpSocMonthListVO>> listAllByCompanyId(SocCheckCustomQuery socCheckCustomQuery);
}

